<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once(APPPATH.'classes/abstract/udbase.php');
require_once(APPPATH.'classes/abstract/udentity.php');

class LocalEntrega extends UDEntity {
	protected $cod_local_auto;
	protected $cod_cliente_auto;
	protected $cod_cidade_auto;
	protected $desc_local_entrega;
	protected $endereco;
	protected $numero;
	protected $bairro;
	protected $cep;
	protected $obs;

	protected $CI;

	public function __construct($id = ''){
		$this->cod_local_auto     = '';
		$this->cod_cliente_auto   = '';
		$this->cod_cidade_auto    = '';
		$this->desc_local_entrega = '';
		$this->endereco           = '';
		$this->numero             = '';
		$this->bairro             = '';
		$this->cep                = '';
		$this->obs                = '';

		$this->CI =& get_instance();

		if (!empty($id)){		
			$this->carregar($id);
		}
	}

	public function hasID(){
		return !empty($this->cod_local_auto) && $this->cod_local_auto > 0;
	}

	public function carregar($id){
	    $this->CI->db->where('cod_local_auto', $id);
	    $query = $this->CI->db->get('local_entrega');

	    if($query && $query->num_rows() == 1 ){
	      foreach ($query->result() as $local){
	        $this->cod_local_auto     = $local->cod_local_auto;
	        $this->cod_cliente_auto   = $local->cod_cliente_auto;
	        $this->cod_cidade_auto    = $local->cod_cidade_auto;
	        $this->desc_local_entrega = $local->desc_local_entrega;
	        $this->endereco           = $local->endereco;
	        $this->numero             = $local->numero;
	        $this->bairro             = $local->bairro;
	        $this->cep                = $local->cep;
	        $this->obs                = $local->obs;
	      }
	  	}
	}

	public function carregarListaLocais($cod_cliente_auto){
		$this->CI->db->where('cod_cliente_auto', $cod_cliente_auto);
		$q = $this->CI->db->get('local_entrega');

		$enderecos = array();

		if ($q && $q->num_rows() > 0){
			foreach ($q->result() as $endereco){
				$enderecos[] = $endereco;
			}
		}

		return $enderecos;
	}

	public function gravar(){
		$validacao = $this->validar();
		if ($validacao[0]){
			// update
			if ($this->hasID()) {
				$data = array(
					//'cod_cliente_auto'  => $this->getCodCliente(),
					'cod_cidade_auto'    => $this->getCodCidade(),
					'desc_local_entrega' => $this->getDescLocal(),
					'endereco'           => $this->getEndereco(),
					'numero'             => $this->getNumero(),
					'bairro'             => $this->getBairro(),
					'cep'                => $this->getCEP(),
					'obs'                => $this->getOBS()
				);
				
				$this->CI->db->where('cod_local_auto',$this->getCodLocal());
				$this->CI->db->update('local_entrega', $data);
				if ($this->CI->db->affected_rows() > 0){
					$validacao = array(true, 'Alterado com sucesso.');
				}else{
					$validacao = array(true, 'Falha ao alterar, tente novamente.');
				}
			// insert
			}else{
				$data = array(
					'cod_cliente_auto'   => $this->getCodCliente(),
					'cod_cidade_auto'    => $this->getCodCidade(),
					'desc_local_entrega' => $this->getDescLocal(),
					'endereco'           => $this->getEndereco(),
					'numero'             => $this->getNumero(),
					'bairro'             => $this->getBairro(),
					'cep'                => $this->getCEP(),
					'obs'                => $this->getOBS()
				);
				
				$query = $this->CI->db->insert('local_entrega', $data);
				$this->cod_local_auto = $this->CI->db->insert_id();
				if ($this->cod_local_auto > 0){
					$validacao = array(true, 'Cadastrado com sucesso.');
				}else{
					$validacao = array(false, 'Falha ao cadastrar, tente novamente.');					
				}
			}
		}

		return $validacao;
	}

	public function validar(){
		$validacao = array(true, '');

		$msgValidacao = 'Campo(s) obrigatório(s) não preenchido(s):<br>&emsp;';
		$validou = true;
		
		if (empty($this->desc_local_entrega)){
			$msgValidacao .= 'Identificação do local, ';
			$validou = false;
		}	
		if (empty($this->cod_cidade_auto)){
			$msgValidacao .= 'Cidade, ';
			$validou = false;
		}
		if (empty($this->endereco)){
			$msgValidacao .= 'Endereço, ';
			$validou = false;
		}
		if (empty($this->numero)){
			$msgValidacao .= 'Número, ';
			$validou = false;
		}
		if (empty($this->bairro)){
			$msgValidacao .= 'Bairro, ';
			$validou = false;
		}
		if (empty($this->cep)){
			$msgValidacao .= 'CEP, ';
			$validou = false;
		}

		if (!$validou){
			$msgValidacao = substr($msgValidacao, 0, -2) . '.';// retira a última vírgula
			$validacao = array(false, $msgValidacao);
		}

		if($this->hasID()){
			//update
			$this->CI->db->from('local_entrega');				
			$this->CI->db->where('cod_cidade_auto', $this->getCodCidade());
			$this->CI->db->where('endereco', $this->getEndereco());
			$this->CI->db->where('numero', $this->getNumero());
			$this->CI->db->where('bairro', $this->getBairro());
			$this->CI->db->where('cep', $this->getCEP());
			$this->CI->db->where('cod_local_auto != ', $this->cod_local_auto);

			if($this->CI->db->count_all_results() > 0){
				$validacao = array(false, 'Endereço já cadastrado.');
			}
		}else{
			//insert
			$this->CI->db->from('local_entrega');
			$this->CI->db->where('cod_cliente_auto', $this->getCodCliente());					
			$this->CI->db->where('cod_cidade_auto', $this->getCodCidade());
			$this->CI->db->where('endereco', $this->getEndereco());
			$this->CI->db->where('numero', $this->getNumero());
			$this->CI->db->where('bairro', $this->getBairro());
			$this->CI->db->where('cep', $this->getCEP());

			if($this->CI->db->count_all_results() > 0){
				$validacao = array(false, 'Endereço já cadastrado.');
			}
		}

		return $validacao;
	}

	//
	// Getters e Setters
	//         

	public function getDescLocal(){
		return $this->desc_local_entrega;
	}

	public function setDescLocal($descricao){
		$this->desc_local_entrega = $descricao;
	}	

	public function getCodLocal(){
		return $this->cod_local_auto;
	}

	public function getOBS(){
		return $this->obs;
	}
	
	public function setOBS($OBS){
		$this->obs = $OBS;
	}

	public function getCEPFormatado(){
		return UDUtil::mask(str_pad((string)$this->cep, 8, STR_PAD_LEFT), '##.###-###');
	}

	public function getCEP(){
		return $this->cep;
	}
	
	public function setCEP($CEP){
		if (isset($CEP))
			$CEP = str_replace(array('-','.'), '', $CEP);
		$this->cep = $CEP;
	}

	public function getBairro(){
		return $this->bairro;
	}
	
	public function setBairro($Bairro){
		$this->bairro = $Bairro;
	}

	public function getNumero(){
		return $this->numero;
	}
	
	public function setNumero($numero){
		$this->numero = $numero;
	}

	public function getCodCliente(){
		return $this->cod_cliente_auto;
	}
	
	public function setCodCliente($codCliente){
		$this->cod_cliente_auto = $codCliente;
	}

	public function getCodCidade(){
		return $this->cod_cidade_auto;
	}
	
	public function setCodCidade($codCidade){
		$this->cod_cidade_auto = $codCidade;
	}

	public function getEndereco(){
		return $this->endereco;
	}
	
	public function setEndereco($Endereco){
		$this->endereco = $Endereco;
	}	
}